<?php
    class ftp {
	public $conn_id;                      // FTP连接
        public $host;
        public $port;
        public $user;
        public $pass;
        
        function __construct($host,$port,$user,$pass) {
            $this->host = $host;
            $this->port = $port;
            $this->user = $user;
            $this->pass = $pass;
	}
        
        
	/**
	* 方法：FTP连接
	* @FTP_HOST -- FTP主机
	* @FTP_PORT -- 端口
	* @FTP_USER -- 用户名
	* @FTP_PASS -- 密码
	*/
	function connect() {
            $this->conn_id = ftp_connect($this->host,$this->port);
            if ($this->conn_id==null or $this->conn_id==FALSE) {
                return FALSE;
            }
            if (ftp_login($this->conn_id,$this->user,$this->pass)==FALSE) {
                return FALSE;
            }
            if (ftp_pasv($this->conn_id,1)==FALSE) { // 打开被动模拟
                return FALSE;
            }
            return TRUE;
	}

	/**
	* 方法：上传文件
	* @path    -- 本地路径
	* @newpath -- 上传路径
	* @type    -- 若目标目录不存在则新建
	*/
	function up_file($path,$newpath,$type=true) {
            if ($type) {
                $this->dir_mkdirs($newpath);
            }
            if (ftp_put($this->conn_id,$newpath,$path,FTP_BINARY)==FALSE) {
                return FALSE;
            }
            return TRUE;
	}

	/**
	* 方法：移动文件
	* @path    -- 原路径
	* @newpath -- 新路径
	* @type    -- 若目标目录不存在则新建
	*/
	function move_file($path,$newpath,$type=true) {
            if ($type) {
                $this->dir_mkdirs($newpath);
            }
            if (ftp_rename($this->conn_id,$path,$newpath)==FALSE) {
                return FALSE;
            }
            return TRUE;
	}

	/**
	* 方法：删除文件
	* @path -- 路径
	*/
	function del_file($path) {
            if (ftp_delete($this->conn_id,$path)==FALSE) {
                return FALSE;
            }
            return TRUE;
	}

	/**
	* 方法：生成目录
	* @path -- 路径
	*/
	function dir_mkdirs($path) {
            $path_arr  = explode('/',$path);              // 取目录数组
            $path_div  = count($path_arr);                // 取层数
            foreach($path_arr as $val) {
                if(ftp_chdir($this->conn_id,$val)==FALSE || ftp_mkdir($this->conn_id,$val)==FALSE) {
                    return FALSE;
                }
                ftp_chdir($this->conn_id,$val);
            }
            for($i=1;$i<=$path_div;$i++) {
		ftp_cdup($this->conn_id);
            }
            return TRUE;
	}

	/**
	* 方法：关闭FTP连接
	*/
	function close() {
            if ($this->conn_id!=null && is_object($this->conn_id)) {
                ftp_close($this->conn_id);
            }
	}
}